$Description$
设$d$为$1\sim n$号点的最短路,问有多少长度不超过$d+K$的$1\sim n$路线。
$Solution$
设$dis1_{a.\,b}$为$a$到$b$的最短路,$dis_{a,b}$为$a$到$b$的路线
设$f[u][j]$为$dis[u][n]\leqslant dis1[u][n]+j$的方案数,这里把$j$称为“多余的路”
答案就是$f[1][K]$
考虑一条边$(u,v,w)$
走这条边的话,$(dis1[v][n]+w-dis1[u][n])$即是多余的路,当前的$f[u][j]$可以被$f[v]j-(dis1[v][n]+w-dis1[u][n])<=K)$更新
以上可以用跑一边反图,然后记忆化搜索实现
那么对于有$0$环这种情况怎么办呢,记一个$vis$数组,如果当前的$(u,k)$已经访问过了$($即$vis[u][k]==1)$,则直接返回$-1$即可
$Code$
1 |
|